package com.pm.buglist.mapper;

import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.pm.buglist.domain.GYSBugs;
import com.pm.buglist.domain.vo.ProjectBugVo;
import com.pm.buglist.domain.Bugs;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 项目bugs列表 Mapper 接口
 * </p>
 *
 * @author wwm
 * @since 2023-12-14
 */
@Mapper
public interface BugsMapper extends BaseMapper<Bugs> {

    /**
     * 查询项目bugs列
     *
     * @param id 项目bugs列主键
     * @return 项目bugs列
     */
    public Bugs selectBugsById(Long id);

    /**
     * 查询项目bugs列列表
     *
     * @param bugs 项目bugs列
     * @return 项目bugs列集合
     */
    public List<Bugs> selectBugsList(Bugs bugs);

    /**
     * 新增项目bugs列
     *
     * @param bugs 项目bugs列
     * @return 结果
     */
    public int insertBugs(Bugs bugs);

    /**
     * 修改项目bugs列
     *
     * @param bugs 项目bugs列
     * @return 结果
     */
    public int updateBugs(Bugs bugs);

    /**
     * 查询指派给研发的bug数据
     * @param bugs
     * @return
     */
    public List<Bugs> selectAssignRdBugsList(Bugs bugs);

    /**
     * 查询指派给品质的bug数据
     * @param bugs
     * @return
     */
    public List<Bugs> selectAssignQdeBugsList(Bugs bugs);

    /**
     * 查询指派给Npi的bug数据
     * */
    public List<Bugs> selectAssignNpiBugList(Bugs bugs);

    /**
     * 查询bugs库
     * */
    public List<ProjectBugVo> projectBugList(ProjectBugVo project);

    /**
     * 导出第一版本的描述，最后关闭版本的分析与对策
     * @param project
     * @return
     */
    public List<ProjectBugVo> projectBugListTwo(ProjectBugVo project);

    /**
     * 根据项目id 删除项目下的所有bug
     * */
    public int batchDeleteBugByPid(Long pid);

    //研发查询已处理的数据
    public List<Bugs> rdBugListProcessed(Bugs bugs);


    /**
     * 查询研发角色待处理bug数据数量
     * @param bugs
     * @return
     */
    public List<String> selectAssignRdBugsCount(Bugs bugs);

    /**
     * 查询品质角色创建的bug数据数量（未关闭状态）
     * @param bugs
     * @return
     */
    public List<String> selectQdeNoCloseCount(Bugs bugs);

    /**
     * 查询品质角色待处理bug数据数量
     * @param bugs
     * @return
     */
    public List<String> selectAssignQdeBugsCount(Bugs bugs);

    /**
     * 查询npi角色待处理bug数据数量
     * @param bugs
     * @return
     */
    public List<String> selectAssignNpiBugCount(Bugs bugs);

    public List<JSONObject> selectExceptionTypeDate();

    //品质查询研发申请waive的bug
    public List<Bugs> DqeSelectApproveWaiveBug(@Param("waiveStatus") String waiveStatus, @Param("userId")Long userId);

    //研发查询申请waive的记录数据
    public List<Bugs> RdApproveWaiveBug(@Param("approveWaiveStatus") String approveWaiveStatus,@Param("waiveStatus") String waiveStatus,
                                        @Param("userId")Long userId, @Param("pid")Long pid,@Param("putOATab") String putOATab);

    //根据bug id 查询对应的waive bug信息
    public JSONObject getWaiveBugById(Long id);

    //查询品质所有bug数量统计
    public List<JSONObject> selectDqeTotalCount(String code);
    //查询品质已关闭的bug数量统计
    public List<JSONObject> selectDqeCloseCount(String code);
    //查询bug异常代码统计
    public List<JSONObject> selectExceptionCodeType(Bugs bugs);

    List<JSONObject> queryTotalBugByProject(JSONObject param);

    List<JSONObject> queryTotalBugTypeByProject(JSONObject param);

    List<GYSBugs> assignGYSBugsList(Bugs bugs);

    List<GYSBugs> gysBugListProcessed(Bugs bugs);
}
